/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import conexao.Conexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modelo.Pedido;
import modelo.PedidoItem;
import modelo.Produto;

public class PedidoItemDAO {
    
    private Connection conexao;
    private PreparedStatement stmt;
    private ResultSet rs;
    private String sql;
    
    public PedidoItemDAO() throws Exception {
        try {
            this.conexao = Conexao.getConexao();
        } catch (Exception ex) {
            throw new Exception("Erro: " + ex.getMessage());
        }
    }

    public void finalizar() throws Exception {
        try {
            Conexao.closeConexao(this.conexao, this.stmt, this.rs);
        } catch (SQLException ex) {
            throw new Exception("Erro ao finalizar " + ex);
        }
    }
    
    public void incluir(PedidoItem pedidoitem) throws Exception {
        try {
            sql = "insert into PEDIDOITEM (ID, PEDIDO, PRODUTO, QTD, VALOR) values (?, ?, ?, ?, ?)";
            stmt = conexao.prepareStatement(sql);
            
            stmt.setInt(1, pedidoitem.getId());
            stmt.setInt(2, pedidoitem.getPedido().getId());   
            stmt.setInt(3, pedidoitem.getProduto().getId());
            stmt.setFloat(4, pedidoitem.getQtd());
            stmt.setFloat(5, pedidoitem.getValor());            

            stmt.execute();
            stmt.close();
        } catch (SQLException ex) {
            throw new Exception("Erro ao incluir " + ex);
        }
    }

    public void alterar(PedidoItem pedidoitem) throws Exception {
        try {
            sql = "update PEDIDOITEM set PEDIDO=? where ID=?";
            stmt = conexao.prepareStatement(sql);
            stmt.setInt(1, pedidoitem.getPedido().getId());
            stmt.setInt(2, pedidoitem.getId());
            stmt.execute();
            stmt.close();
        } catch (SQLException ex) {
            throw new Exception("Erro ao alterar " + ex);
        }
    }

    public void excluir(Integer id) throws Exception {
        try {
            sql = "delete from PEDIDOITEM where ID=?";
            stmt = conexao.prepareStatement(sql);
            stmt.setInt(1, id);
            stmt.execute();
            stmt.close();
        } catch (SQLException ex) {
            throw new Exception("Erro ao excluir " + ex);
        }
    }

    public PedidoItem consultar(Integer id) throws Exception {
        try {
            sql = "select * from PEDIDOITEM where ID=?";
            stmt = conexao.prepareStatement(sql);
            stmt.setInt(1, id);
            rs = stmt.executeQuery();
            PedidoItem pedidoitem = new PedidoItem();
            PedidoDAO fpedido = new PedidoDAO();
            ProdutoDAO fprod = new ProdutoDAO();
            
            if (rs.next()) {
                pedidoitem.setId(rs.getInt("id"));
                pedidoitem.setPedido(fpedido.consultar(rs.getInt("pedido")));
                pedidoitem.setProduto(fprod.consultar(rs.getInt("produto")));
                pedidoitem.setQtd(rs.getFloat("qtd"));
                pedidoitem.setValor(rs.getFloat("valor"));                
            }
            rs.close();
            stmt.close();
            return pedidoitem;
        } catch (SQLException ex) {
            throw new Exception("Erro ao consultar " + ex);
        }    
    }    
    
    public List<PedidoItem> listar() throws Exception {
        try {
            sql = "select * from PEDIDOITEM";
            stmt = conexao.prepareStatement(sql);
            rs = stmt.executeQuery();
            List<PedidoItem> pedidoitens = new ArrayList<PedidoItem>();
            PedidoDAO fpedido  = new PedidoDAO();
            ProdutoDAO fproduto  = new ProdutoDAO();
            
            while (rs.next()) {
                PedidoItem pedidoitem = new PedidoItem();
                pedidoitem.setId(rs.getInt("id"));
                pedidoitem.setPedido(fpedido.consultar(rs.getInt("pedido")));                
                pedidoitem.setProduto(fproduto.consultar(rs.getInt("produto"))); 
                pedidoitem.setQtd(rs.getFloat("qtd"));
                pedidoitem.setValor(rs.getFloat("valor"));
                
                pedidoitens.add(pedidoitem);
            }
            rs.close();
            stmt.close();
            
            return pedidoitens;
        } catch (SQLException ex) {
            throw new Exception("Erro ao listar " + ex);
        }
    }            
    
}
